// src/main.rs
// IndustryAgent - 基于华为云工业物联平台的语义转换系统
// 比赛版本实现

use log::{info, error};
use anyhow::Result;

// 只导入必要的模块
mod config;
mod web;

use config::Config;
use web::start_server;

#[tokio::main]
async fn main() -> Result<()> {
    // 初始化日志系统
    env_logger::Builder::from_default_env()
        .filter_level(log::LevelFilter::Info)
        .init();

    info!("启动 IndustryAgent - 基于华为云工业物联平台的语义转换系统");
    info!("比赛版本 v1.0.0");

    // 加载配置
    let config = match Config::load() {
        Ok(config) => {
            info!("配置加载成功");
            config
        }
        Err(e) => {
            error!("配置加载失败: {}", e);
            error!("请确保 config/default 文件存在且包含有效的配置");
            return Err(e.into());
        }
    };

    info!("IndustryAgent 服务启动成功！");
    info!("支持的功能:");
    info!("  - 华为云 IoT 平台集成");
    info!("  - 数据库语义转换");
    info!("  - OPC UA Web API 服务");
    info!("  - 多种工业应用场景");

    // 启动 HTTP 服务器
    let server_address = config.server_address();
    info!("OPC UA Web API 服务地址: http://{}", server_address);
    info!("健康检查端点: http://{}/health", server_address);
    info!("语义转换端点: http://{}/convert", server_address);

    info!("正在启动 HTTP 服务器...");

    // 调用 start_server 启动服务器
    if let Err(e) = start_server(config).await {
        error!("服务器启动失败: {}", e);
        return Err(e);
    }

    info!("IndustryAgent 服务器已停止");

    Ok(())
}